package io.github.talelin.latticy.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.github.talelin.latticy.dto.PointsAdjustDTO;
import io.github.talelin.latticy.dto.PointsRecordDTO;
import io.github.talelin.latticy.model.PointsRecordDO;
import io.github.talelin.latticy.vo.PointsRecordVO;
import io.github.talelin.latticy.vo.PointsStatsVO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 积分记录服务接口
 * @author talelin
 */
public interface PointsRecordService {

    /**
     * 增加积分
     */
    PointsRecordDO addPoints(PointsRecordDTO dto);

    /**
     * 扣除积分
     */
    PointsRecordDO deductPoints(PointsRecordDTO dto);

    /**
     * 调整积分（管理员操作）
     */
    PointsRecordDO adjustPoints(PointsAdjustDTO dto);

    /**
     * 获取积分记录详情
     */
    PointsRecordDO getRecordDetail(Integer recordId);

    /**
     * 分页获取用户积分记录
     */
    IPage<PointsRecordVO> getUserRecords(Long userId, Integer page, Integer count, String type, String source);

    /**
     * 获取用户积分统计信息
     */
    PointsStatsVO getUserPointsStats(Long userId);

    /**
     * 获取即将过期的积分记录
     */
    List<PointsRecordDO> getExpiringPoints(Long userId);

    /**
     * 处理积分过期
     */
    void handleExpiredPoints();

    /**
     * 检查积分余额是否足够
     */
    boolean checkPointsBalance(Long userId, Integer requiredPoints);

    /**
     * 获取用户当前积分余额
     */
    Integer getCurrentBalance(Long userId);

    /**
     * 根据订单ID查询积分记录
     */
    List<PointsRecordDO> getRecordsByOrderId(Long orderId);

    /**
     * 获取用户积分列表（分页）
     */
    IPage<PointsStatsVO> getUserPointsList(Integer page, Integer count, String username, Integer minPoints, Integer maxPoints, String status);

    /**
     * 初始化用户积分
     */
    String initUsersPoints(Integer defaultPoints);
}
